home *** CD-ROM | disk | FTP | other *** search
/ Popular Request / By Popular Request (Arsenal Computer)(SysOptics Distribution System).ISO / amiga1 / chkdbl10.lha / MyStartup.a < prev    next >
Text File  |  1994-01-16  |  2KB  |  119 lines

  1. * This is a minimal startup code.
  2.  
  3. AbsExecBase    EQU    $00000004
  4.  
  5.     include "dos/dosextens.i"
  6.     include "workbench/startup.i"
  7.  
  8.     include "exec/funcdef.i"
  9.     include "exec/exec_lib.i"
  10.     include "dos/dos_lib.i"
  11.  
  12.     xref _LinkerDB
  13.     xref __BSSBAS
  14.     xref __BSSLEN
  15.  
  16.     section text,code
  17.  
  18.     xdef @exit
  19.     
  20.     xref _main
  21.  
  22. *************************************************
  23.  
  24. Begin:
  25.     lea __BSSBAS,a1                ; clear BSS segment
  26.     move.l #__BSSLEN,d1
  27.     bra.s ClearBSS
  28. ClearBSSLoop:
  29.     clr.l (a1)+
  30. ClearBSS:
  31.     dbf d1,ClearBSSLoop
  32.  
  33.     lea _LinkerDB,a4            ; save stackpointer
  34.     move.l SP,StackPtr(a4)
  35.     move.l AbsExecBase.w,a6            ; load SysBase
  36.     move.l a6,_SysBase(a4)
  37.  
  38.     move.l a0,_Startup(a4)            ; assume CLI startup
  39.     move.l d0,_CommandLineLength(a4)
  40.  
  41.     sub.l a1,a1                ; get our process structure
  42.     jsr _LVOFindTask(a6)
  43.     move.l d0,a0
  44.     tst.l pr_CLI(a0)            ; check for CLI or workbench
  45.     bne.s OpenDOS
  46.  
  47. WorkbenchStartup:
  48.     lea pr_MsgPort(a0),a0            ; wait for workbench message
  49.     move.l a0,a2
  50.     jsr _LVOWaitPort(a6)
  51.     move.l a2,a0                ; and get it
  52.     jsr _LVOGetMsg(a6)
  53.     move.l d0,_Startup(a4)
  54.     clr.l _CommandLineLength(a4)
  55.  
  56. OpenDOS:
  57.     lea DosName(PC),a1            ; open dos.library
  58.     moveq #0,d0
  59.     jsr _LVOOpenLibrary(a6)
  60.     move.l d0,_DOSBase(a4)
  61.     beq.s StartupNoDOS
  62.  
  63.     tst.l _CommandLineLength(a4)        ; if we were run from workbench,
  64.     bne.s RunMain
  65.     move.l d0,a6
  66.     move.l _Startup(a4),a0            ; set our current dir
  67.     move.l sm_ArgList(a0),d0
  68.     beq.s RunMain
  69.     move.l d0,a0
  70.     move.l wa_Lock(a0),d1
  71.     jsr _LVOCurrentDir(a6)
  72.  
  73. RunMain:
  74.     bsr _main                ; run my main C function
  75.     moveq #0,d0
  76.  
  77. @exit:
  78.     move.l StackPtr(a4),SP            ; restore stackpointer
  79.     move.l d0,-(SP)                ; save returncode
  80.  
  81. CloseDOS:
  82.     move.l _DOSBase(a4),a1            ; close dos.library
  83.     move.l AbsExecBase.w,a6
  84.     jsr _LVOCloseLibrary(a6)
  85.  
  86. ExitNoDOS:
  87.     tst.l _CommandLineLength(a4)        ; check whether we need to reply to
  88.     bne.s Exit                ; Workbench
  89.  
  90.     jsr _LVOForbid(a6)            ; reply to Workbench
  91.     move.l _Startup(a4),a1
  92.     jsr _LVOReplyMsg(a6)
  93.  
  94. Exit:    move.l (SP)+,d0                ; get returncode
  95.     rts
  96.  
  97. StartupNoDOS:
  98.     moveq #100,d0
  99.     bra.s ExitNoDOS
  100.  
  101. DosName:    dc.b "dos.library",0
  102.  
  103. *************************************************
  104.  
  105.     section __MERGED,BSS
  106.  
  107.     xdef _SysBase
  108.     xdef _DOSBase
  109.     xdef _CommandLineLength
  110.     xdef _Startup
  111.  
  112. StackPtr        ds.l 1
  113. _SysBase        ds.l 1
  114. _DOSBase        ds.l 1
  115. _CommandLineLength    ds.l 1
  116. _Startup        ds.l 1
  117.  
  118.         END
  119.